﻿var filters = {
    ambientes: []
    // TODO: Pasar resto de los filtros a este objeto
};

$(function () {

    $('.filtros.tiempoEnMercado a').click(applyFilterSuperficieTiempoEnMercado);    
    $('.filtros.superficie a').click(applyFilterSuperficieTiempoEnMercado);
    $('.filtros.ambientes a').click(applyFilterAmbientes);

    $('.filtros.precio #precio-aplicar').click(applyFilterPrecio);
    $('.filtros.precio #precio-eliminar').click(removeFilterPrecio);
});

function applyFilterPrecio(event) {
    var precioFiltersQueryString = $('.filtros.precio input').serialize();

    updateAddressFromQueryString(precioFiltersQueryString);

    event.preventDefault();
}

function removeFilterPrecio(event) {
    $('.filtros.precio input[name*=PrecioMin]').val('');
    $('.filtros.precio input[name*=PrecioMax]').val('');
    $('.filtros.precio input:radio[name*=Moneda]:checked').attr('checked', false);

    var precioFiltersQueryString = $('.filtros.precio input').serialize();

    updateAddressFromQueryString(precioFiltersQueryString);
    updateAddressFromSingleValue('Moneda', '');

    event.preventDefault();
}

function applyFilterAmbientes(event) {    
    var filterQueryString = $(this).attr('href').split('?')[1];

    var ambientesArray = getArrayFromQueryString(filterQueryString);

    if ($(this).hasClass('cleanAll')) { // si es opcion indistinto       
        filters.ambientes = [];
        
        $(this).siblings().removeClass('selected');
        $(this).addClass('selected');
    
    } else if (!$(this).hasClass('selected')) { // si no estaba aplicado, lo aplico
        for (index in ambientesArray) {
            filters.ambientes.push(ambientesArray[index]);
        }
        $(this).siblings('.cleanAll').removeClass('selected');
        $(this).addClass('selected');
    
    } else {  // si esta aplicado, lo desaplico
        for (index in ambientesArray) { 
            filters.ambientes = $.grep(filters.ambientes, function (value) { return value != ambientesArray[index]; });
        }
        $(this).removeClass('selected');
    }

    updateAddressFromArray('Ambientes', filters.ambientes);

    event.preventDefault();    
}

function applyFilterSuperficieTiempoEnMercado(event) {
    if (!$(this).hasClass('selected')) {
        var filterQueryString = $(this).attr('href').split('?')[1];

        updateAddressFromQueryString(filterQueryString);

        $(this).siblings().removeClass('selected');

        $(this).addClass('selected');
    }

    event.preventDefault();
}

function updateAddressFromArray(filterName, array) {
    $.address.autoUpdate(false);
    $.address.parameter(filterName, '');
    
    for (value in array) {
        $.address.parameter(filterName, array[value], true);
    }

    $.address.update();
    $.address.autoUpdate(true);
}

function updateAddressFromSingleValue(filterName, filterValue) {
    $.address.parameter(filterName, filterValue);
}

function updateAddressFromQueryString(filterQueryString) {
    $.address.autoUpdate(false);
    var filterArray = getArrayFromQueryString(filterQueryString);

    for (filter in filterArray) {
        $.address.parameter(filter, filterArray[filter]);
    }

    $.address.update();
    $.address.autoUpdate(true);
}

function getArrayFromQueryString(queryString) {
    var queryStringArray = new Array();
    var pairs = queryString.split('&');
    for (i in pairs) {
        var keyval = pairs[i].split('=');
        queryStringArray[keyval[0]] = keyval[1];
    }

    return queryStringArray;
}